<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<script>
    //1、函数参数默认值
    //在ES6以前，我们无法给一个函数参数设置默认值，只能采用变通写法：
    function add(a , b) {
        // 判断b是否为空，为空就给默认值1，不是空：b = b
        // 下面等价于: if(!b) {b = 1}
        b = b || 1;
        return a + b;
    }
    // 传一个参数
    console.log(add(10));
    
    //现在可以这么写：
    function add(a , b = 1) {
        return a + b;
    }
    // 传一个参数
    console.log(add(10));

    //不定参数
    //不定参数用来表示不确定参数个数，形如，...变量名，由...加上一个具名参数标识符组成。
    //具名参数只能放在参数列表的最后，并且有且只有一个不定参数
    function fun(...values) {
      console.log(values.length)
    }
    fun(1, 2) //2
    fun(1, 2, 3, 4) //4

    //2、箭头函数，ES6中定义函数的简写方式：
    //2.1 一个参数时：
    let print1 = function (obj) {
        console.log(obj);
    }
    // 简写为：
    let print2 = obj => console.log(obj);

    //2.2 多个参数：
    // 当箭头函数没有参数或者有多个参数，要用 () 括起来。
    // 当箭头函数函数体有多行语句，用 {} 包裹起来，表示代码块，
    // 当只有一行语句，并且需要返回结果时，可以省略 {} , 结果会自动返回。
    let sum1 = function (a , b) {
        return a + b;
    }
    // 简写为：
    let sum2 = (a, b) => {
        return a + b;
    }
    var sum3 = (a,b) => a + b;

    //2.3 对象的函数属性简写
    let person = {
        name: "jack",
        // 以前：
        eat1: function (food) {
            console.log(this.name + "在吃" + food);
        },
        // 箭头函数版：这里拿不到this,this是person外面的域，使用"对象.属性"
        eat2: food => console.log(person.name + "在吃" + food),
        // 简写版：
        eat3(food){
            console.log(this.name + "在吃" + food);
        }
    }

</script>
</body>
</html>